home *** CD-ROM | disk | FTP | other *** search
- /*
- * Window Maker window manager
- *
- * Copyright (c) 1997, 1998 Alfredo K. Kojima
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- * USA.
- */
-
- #include "wconfig.h"
-
- #include <X11/Xlib.h>
- #include <X11/Xutil.h>
-
- #include <stdlib.h>
- #include <string.h>
-
- #include "WindowMaker.h"
- #include "wcore.h"
-
-
- /****** Global Variables ******/
- extern WPreferences wPreferences;
-
- /* cursors */
- extern Cursor wCursor[WCUR_LAST];
-
- extern XContext wWinContext;
-
-
- /*
- *----------------------------------------------------------------------
- * wCoreCreateTopLevel--
- * Creates a toplevel window used for icons, menus and dialogs.
- *
- * Returns:
- * The created window.
- *----------------------------------------------------------------------
- */
- WCoreWindow*
- wCoreCreateTopLevel(WScreen *screen, int x, int y, int width, int height,
- int bwidth)
- {
- WCoreWindow *core;
- int vmask;
- XSetWindowAttributes attribs;
-
- core = wmalloc(sizeof(WCoreWindow));
- memset(core, 0, sizeof(WCoreWindow));
-
- vmask = /*CWBackPixmap|*/CWBackPixel|CWBorderPixel|CWCursor|CWEventMask
- |CWOverrideRedirect;
- attribs.override_redirect = True;
- attribs.cursor = wCursor[WCUR_DEFAULT];
- attribs.background_pixmap = None;
- attribs.background_pixel = screen->black_pixel;
- attribs.border_pixel = screen->frame_border_pixel;
- attribs.event_mask = SubstructureRedirectMask | ButtonPressMask
- | ButtonReleaseMask | ButtonMotionMask | ExposureMask | EnterWindowMask
- | LeaveWindowMask;
-
- vmask |= CWColormap;
- attribs.colormap = screen->w_colormap;
-
- core->window = XCreateWindow(dpy, screen->root_win, x, y, width, height,
- bwidth, screen->w_depth, CopyFromParent,
- screen->w_visual, vmask, &attribs);
- core->width = width;
- core->height = height;
- core->screen_ptr = screen;
-
- core->descriptor.self = core;
-
- XClearWindow(dpy, core->window);
-
- XSaveContext(dpy, core->window, wWinContext, (XPointer)&core->descriptor);
-
- return core;
- }
-
-
- /*
- *----------------------------------------------------------------------
- * wCoreCreate--
- * Creates a brand new child window.
- * The window will have a border width of 0 and color is black.
- *
- * Returns:
- * A initialized core window structure.
- *
- * Side effects:
- * A window context for the created window is saved.
- *
- * Notes:
- * The event mask is initialized to a default value.
- *
- *----------------------------------------------------------------------
- */
- WCoreWindow*
- wCoreCreate(WCoreWindow *parent, int x, int y, int width, int height)
- {
- WCoreWindow *core;
- int vmask;
- XSetWindowAttributes attribs;
-
- core=wmalloc(sizeof(WCoreWindow));
- memset(core, 0, sizeof(WCoreWindow));
-
- vmask = CWBackPixmap|CWBackPixel|CWBorderPixel|CWCursor|CWEventMask;
- attribs.cursor = wCursor[WCUR_DEFAULT];
- attribs.background_pixmap = None;
- attribs.background_pixel = parent->screen_ptr->black_pixel;
- attribs.event_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask
- | ButtonReleaseMask | ButtonMotionMask | ExposureMask | EnterWindowMask
- | LeaveWindowMask;
- /*
- vmask |= CWColormap;
- attribs.colormap = parent->screen_ptr->w_colormap;
- */
- core->window =
- XCreateWindow(dpy, parent->window, x, y, width, height, 0,
- parent->screen_ptr->w_depth, CopyFromParent,
- parent->screen_ptr->w_visual, vmask, &attribs);
- core->width=width;
- core->height=height;
- core->screen_ptr = parent->screen_ptr;
-
- core->descriptor.self = core;
-
- XSaveContext(dpy, core->window, wWinContext, (XPointer)&core->descriptor);
- return core;
- }
-
-
-
- void
- wCoreDestroy(WCoreWindow *core)
- {
- if (core->stacking) {
- free(core->stacking);
- }
- XDeleteContext(dpy, core->window, wWinContext);
- XDestroyWindow(dpy, core->window);
- free(core);
- }
-
-
- void
- wCoreConfigure(WCoreWindow *core, int req_x, int req_y, int req_w, int req_h)
- {
- XWindowChanges xwc;
- unsigned int mask;
-
- mask = CWX|CWY;
- xwc.x = req_x;
- xwc.y = req_y;
-
- if (req_w <= 0)
- req_w = core->width;
- if (req_h <= 0)
- req_h = core->height;
-
- if (req_w != core->width || req_h != core->height) {
- mask |= CWWidth | CWHeight;
- xwc.width = req_w;
- xwc.height = req_h;
- core->width = req_w;
- core->height = req_h;
- }
- XConfigureWindow(dpy, core->window, mask, &xwc);
- }
-
-
-